package org.sadhar.sipp.perekamanitembiaya;

import org.sadhar.sipp.satuan.SatuanDAO;
import org.sadhar.sipp.satuan.SatuanDAOImpl;
import org.sadhar.sipp.posbiaya.PosBiayaDAO;
import org.sadhar.sipp.posbiaya.PosBiayaDAOImpl;


import org.sadhar.sia.framework.ClassApplicationModule;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Space;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

public class PerekamanItemBiayaWnd extends ClassApplicationModule {

    private PerekamanItemBiayaDAO itemBiayaDAO;
    private SatuanDAO satuanDAO;
    private PosBiayaDAO posBiayaDAO;

    public PerekamanItemBiayaWnd() {
        itemBiayaDAO = new PerekamanItemBiayaDAOImpl();
        satuanDAO = new SatuanDAOImpl();
        posBiayaDAO = new PosBiayaDAOImpl();
    }
    //private Bandbox bndboxPosBiaya;
    private Textbox txtboxKodePosBiaya;
    //private Listbox lstboxPosBiaya;
    private Textbox txtboxNamaItemBiaya;
    private Textbox txtboxKodeItemBiaya;
    //private Bandbox bndboxSatuan;
    //private Listbox lstboxSatuan;
    private Textbox txtboxKodeSatuanBarang;
    private Button btnSimpan;
    private Button btnBatal;
    private Label lblPosBiaya;
    //private Grid gridItemBiaya;
    private Textbox txtboxCariPosBiaya;
    private Button btnCariPosBiaya;
    private Textbox txtboxCariSatuanBarang;
    private Button btnCariSatuan;
    private Listbox lstboxItemBiaya;

    public void onCreate() throws Exception {

        txtboxCariPosBiaya = (Textbox) getFellow("txtboxCariPosBiaya");
        txtboxKodePosBiaya = (Textbox) getFellow("txtboxKodePosBiaya");
        txtboxNamaItemBiaya = (Textbox) getFellow("txtboxNamaItemBiaya");
        txtboxKodeItemBiaya = (Textbox) getFellow("txtboxKodeItemBiaya");
        txtboxKodeSatuanBarang = (Textbox) getFellow("txtboxKodeSatuanBarang");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnBatal = (Button) getFellow("btnBatal");
        lblPosBiaya = (Label) getFellow("lblPosBiaya");
        //gridItemBiaya = (Grid) getFellow("gridItemBiaya");
        btnCariPosBiaya = (Button) getFellow("btnCariPosBiaya");
        txtboxCariSatuanBarang = (Textbox) getFellow("txtboxCariSatuanBarang");
        btnCariSatuan = (Button) getFellow("btnCariSatuan");
        lstboxItemBiaya = (Listbox) getFellow("lstboxItemBiaya");
        clear();
        load();
    }

    public void btnBatalOnClick() throws Exception {
        clear();
        loadItemBiaya();
    }

    public void btnCariPosBiayaOnClick() throws Exception {
        final Window win = (Window) Executions.createComponents("/sippzul/perekamanitembiaya/PosBiayaPopup.zul", this, null);
        Textbox txtboxKeySearch = (Textbox) win.getFellow("txtboxKeySearch");
        txtboxKeySearch.setValue(txtboxCariPosBiaya.getValue());
        win.doModal();
    }

    public void btnCariSatuanOnClick() throws Exception {
        final Window windowSatuan = (Window) Executions.createComponents("/sippzul/perekamanitembiaya/SatuanBarangPopup.zul", this, null);
        Textbox txtboxKeySearch = (Textbox) windowSatuan.getFellow("txtboxKeySearch");
        txtboxKeySearch.setValue(txtboxCariSatuanBarang.getValue());
        windowSatuan.doModal();

    }

    public void clear() throws Exception {
        // lblPosBiaya.setValue("");
        // txtboxCariPosBiaya.setValue("");
        //txtboxKodePosBiaya.setValue("");
        txtboxNamaItemBiaya.setValue("");
        txtboxKodeItemBiaya.setValue("");
        txtboxCariSatuanBarang.setValue("");
        txtboxKodeSatuanBarang.setValue("");
        disableTextbox(false);
    }

    public void load() throws Exception {
        loadItemBiaya();
    }

    public void lstboxItemBiayaOnSelect() throws Exception {
        PerekamanItemBiaya itemBiaya = (PerekamanItemBiaya) lstboxItemBiaya.getSelectedItem().getValue();
        lblPosBiaya.setValue(posBiayaDAO.select(itemBiaya.getKodePosBiaya()).getNamaPosBiaya());
        txtboxKodePosBiaya.setValue(itemBiaya.getKodePosBiaya() + "");
        txtboxNamaItemBiaya.setValue(itemBiaya.getNamaItem());
        txtboxKodeItemBiaya.setValue(itemBiaya.getKodeItem() + "");
        txtboxCariSatuanBarang.setValue(satuanDAO.select(itemBiaya.getKodeSatuan()).getSatuan());
        txtboxKodeSatuanBarang.setValue(itemBiaya.getKodeSatuan() + "");
        disableTextbox(true);

    }

    public void disableTextbox(boolean value) {
        txtboxCariPosBiaya.setDisabled(value);
        txtboxNamaItemBiaya.setDisabled(value);
        txtboxCariSatuanBarang.setDisabled(value);
        btnCariPosBiaya.setDisabled(value);
        btnCariSatuan.setDisabled(value);
    }

    public void loadItemBiaya() throws Exception {
        lstboxItemBiaya.getItems().clear();
        int no = 1;
        for (final PerekamanItemBiaya itemBiaya : itemBiayaDAO.list()) {
            Listitem item = new Listitem();
            item.setValue(itemBiaya);
            item.appendChild(new Listcell(posBiayaDAO.select(itemBiaya.getKodePosBiaya()).getNamaPosBiaya()));
            item.appendChild(new Listcell(itemBiaya.getNamaItem()));
            Listcell cellAksi = new Listcell();

            Toolbarbutton btnUbah = new Toolbarbutton();
            btnUbah.setLabel("[ubah]");
            btnUbah.setId("btnUbah" + (no++));
            btnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    disableTextbox(false);
                    lblPosBiaya.setValue(posBiayaDAO.select(itemBiaya.getKodePosBiaya()).getNamaPosBiaya());
                    txtboxKodePosBiaya.setValue(itemBiaya.getKodePosBiaya() + "");
                    txtboxNamaItemBiaya.setValue(itemBiaya.getNamaItem());
                    txtboxKodeItemBiaya.setValue(itemBiaya.getKodeItem() + "");
                    txtboxCariSatuanBarang.setValue(satuanDAO.select(itemBiaya.getKodeSatuan()).getSatuan());
                    txtboxKodeSatuanBarang.setValue(itemBiaya.getKodeSatuan() + "");
                }
            });

            final Toolbarbutton btnHapus = new Toolbarbutton();
            btnHapus.setLabel("[hapus]");
            btnHapus.setId("btnHapus" + (no++));
            btnHapus.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    // comment : sarah, tgl 10-12-2009
                    /*if (Messagebox.show("Apakah data Item Biaya: " + itemBiaya.getNamaItem() + " akan dihapus?", "Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                    try {
                    itemBiayaDAO.delete(itemBiaya);
                    } catch (Exception ex) {
                    Messagebox.show("Gagal menghapus data: " + ex.getMessage());
                    }
                    btnHapus.addForward(null, btnBatal, "onClick");
                    }*/
                    // revisied by : sarah (BAPSI), tgl 09-12-2009
                    String PesanKonfirmasi = "";
                    // kondisiField dan kondisiValue harus dibedakan jika mengakses tabel lain
                    String kondisiField[] = {"kodeItemBiayaBarang", "kodePosBiaya"};
                    String kondisiValue[] = {String.valueOf(itemBiaya.getKodeItem()), String.valueOf(itemBiaya.getKodePosBiaya())};
                    boolean cek1 = itemBiayaDAO.cekDataTabel("anggaranRABNonRapatKerja", kondisiField, kondisiValue);
                    //
                    String kondisiField2[] = {"kodeItemBiayaBarang", "kodePosBiaya"};
                    String kondisiValue2[] = {String.valueOf(itemBiaya.getKodeItem()), String.valueOf(itemBiaya.getKodePosBiaya())};
                    boolean cek2 = itemBiayaDAO.cekDataTabel("anggaranBiayaRapatKerjaDanKegiatan", kondisiField2, kondisiValue2);
                    //
                    if (cek1 == true || cek2 == true) {
                        PesanKonfirmasi = "Data tersebut sedang digunakan di fitur lain" + "\n" +
                                "Apakah yakin akan " +
                                "menghapus data kegiatan unit?";
                    } else {
                        PesanKonfirmasi = "Apakah data kegiatan unit akan dihapus?";
                    }
                    //
                    try {
                        if (Messagebox.show(PesanKonfirmasi, "Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                            itemBiayaDAO.delete(itemBiaya);
                        }
                        btnHapus.addForward(null, btnBatal, "onClick");
                    } catch (Exception e) {
                        Messagebox.show("Gagal menghapus data " + e.getMessage(), "Error", Messagebox.OK, Messagebox.ERROR);
                    }
                }
            });
            cellAksi.appendChild(btnUbah);
            cellAksi.appendChild(new Space());
            cellAksi.appendChild(btnHapus);
            item.appendChild(cellAksi);
            lstboxItemBiaya.appendChild(item);
        }
    }

    public void loadItemBiayaPerPosBiaya() throws Exception {
        lstboxItemBiaya.getItems().clear();
        int no = 1;
        for (final PerekamanItemBiaya itemBiaya : itemBiayaDAO.listItemBiayaPerPos(Integer.valueOf(txtboxKodePosBiaya.getValue()))) {
            Listitem item = new Listitem();
            item.setValue(itemBiaya);
            item.appendChild(new Listcell(posBiayaDAO.select(itemBiaya.getKodePosBiaya()).getNamaPosBiaya()));
            item.appendChild(new Listcell(itemBiaya.getNamaItem()));
            Listcell cellAksi = new Listcell();

            Toolbarbutton btnUbah = new Toolbarbutton();
            btnUbah.setLabel("[ubah]");
            btnUbah.setId("btnUbah" + (no++));
            btnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    disableTextbox(false);
                    lblPosBiaya.setValue(posBiayaDAO.select(itemBiaya.getKodePosBiaya()).getNamaPosBiaya());
                    txtboxKodePosBiaya.setValue(itemBiaya.getKodePosBiaya() + "");
                    txtboxNamaItemBiaya.setValue(itemBiaya.getNamaItem());
                    txtboxKodeItemBiaya.setValue(itemBiaya.getKodeItem() + "");
                    txtboxCariSatuanBarang.setValue(satuanDAO.select(itemBiaya.getKodeSatuan()).getSatuan());
                    txtboxKodeSatuanBarang.setValue(itemBiaya.getKodeSatuan() + "");
                }
            });

            final Toolbarbutton btnHapus = new Toolbarbutton();
            btnHapus.setLabel("[hapus]");
            btnHapus.setId("btnHapus" + (no++));
            btnHapus.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    // comment : sarah, tgl 10-12-2009
                    /*if (Messagebox.show("Apakah data Item Biaya: " + itemBiaya.getNamaItem() + " akan dihapus?", "Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                    try {
                    itemBiayaDAO.delete(itemBiaya);
                    } catch (Exception ex) {
                    Messagebox.show("Gagal menghapus data: " + ex.getMessage());
                    }
                    btnHapus.addForward(null, btnBatal, "onClick");
                    }*/
                    // revisied by : sarah (BAPSI), tgl 09-12-2009
                    String PesanKonfirmasi = "";
                    // kondisiField dan kondisiValue harus dibedakan jika mengakses tabel lain
                    String kondisiField[] = {"kodeItemBiayaBarang", "kodePosBiaya"};
                    String kondisiValue[] = {String.valueOf(itemBiaya.getKodeItem()), String.valueOf(itemBiaya.getKodePosBiaya())};
                    boolean cek1 = itemBiayaDAO.cekDataTabel("anggaranRABNonRapatKerja", kondisiField, kondisiValue);
                    //
                    String kondisiField2[] = {"kodeItemBiayaBarang", "kodePosBiaya"};
                    String kondisiValue2[] = {String.valueOf(itemBiaya.getKodeItem()), String.valueOf(itemBiaya.getKodePosBiaya())};
                    boolean cek2 = itemBiayaDAO.cekDataTabel("anggaranBiayaRapatKerjaDanKegiatan", kondisiField2, kondisiValue2);
                    //
                    if (cek1 == true || cek2 == true) {
                        PesanKonfirmasi = "Data tersebut sedang digunakan di fitur lain" + "\n" +
                                "Apakah yakin akan " +
                                "menghapus data kegiatan unit?";
                    } else {
                        PesanKonfirmasi = "Apakah data kegiatan unit akan dihapus?";
                    }
                    //
                    try {
                        if (Messagebox.show(PesanKonfirmasi, "Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                            itemBiayaDAO.delete(itemBiaya);
                        }
                        btnHapus.addForward(null, btnBatal, "onClick");
                    } catch (Exception e) {
                        Messagebox.show("Gagal menghapus data " + e.getMessage(), "Error", Messagebox.OK, Messagebox.ERROR);
                    }
                }
            });
            cellAksi.appendChild(btnUbah);
            cellAksi.appendChild(new Space());
            cellAksi.appendChild(btnHapus);
            item.appendChild(cellAksi);
            lstboxItemBiaya.appendChild(item);
        }
    }

    public void btnSimpanOnClick() throws Exception {
        if (lblPosBiaya.getValue().trim().equalsIgnoreCase("")) {
            Messagebox.show("Silahkan pilih Pos Biaya", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            btnCariPosBiaya.setFocus(true);
            return;
        }

        if (txtboxNamaItemBiaya.getValue().trim().equalsIgnoreCase("")) {
            Messagebox.show("Silahkan masukan Nama Item Biaya", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            txtboxNamaItemBiaya.setFocus(true);
            return;
        }

        if (txtboxKodeSatuanBarang.getValue().trim().equalsIgnoreCase("")) {
            Messagebox.show("Silahkan pilih Satuan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            btnCariSatuan.setFocus(true);
            return;
        }

        PerekamanItemBiaya itemBiaya = new PerekamanItemBiaya();
        itemBiaya.setNamaItem(txtboxNamaItemBiaya.getValue());
        itemBiaya.setKodePosBiaya(Integer.valueOf(txtboxKodePosBiaya.getValue()));
        itemBiaya.setKodeSatuan(Integer.valueOf(txtboxKodeSatuanBarang.getValue()));

        if (txtboxKodeItemBiaya.getValue().isEmpty()) {
            //new
            try {
                if (itemBiayaDAO.select(itemBiaya.getNamaItem(), itemBiaya.getKodePosBiaya()).size() <= 0) {
                    itemBiayaDAO.insert(itemBiaya);
                    clear();
                    loadItemBiayaPerPosBiaya();
                } else {
                    Messagebox.show("Data yang anda input sudah ada, Silahkan input data yang lain", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    return;
                }
            } catch (Exception ex) {
                Messagebox.show("Gagal menyimpan data: " + ex.getMessage(), "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
            }
        } else {
            //update
            itemBiaya.setKodeItem(Integer.valueOf(txtboxKodeItemBiaya.getValue()));
            try {
                if (itemBiayaDAO.select(itemBiaya.getNamaItem(), itemBiaya.getKodePosBiaya(), itemBiaya.getKodeItem()).size() <= 0) {
                    itemBiayaDAO.update(itemBiaya);
                    clear();
                    loadItemBiayaPerPosBiaya();
                } else {
                    Messagebox.show("Data yang anda input sudah ada, Silahkan input data yang lain", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
                    return;
                }
            } catch (Exception ex) {
                Messagebox.show("Gagal menyimpan data: " + ex.getMessage(), "Pesan Kesalahan", Messagebox.OK, Messagebox.ERROR);
            }
        }

    }
}
